﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Dominio;
using LogicaNegocios.Exceptions;
using LogicaNegocios.Manager;

namespace UIWeb
{
    public partial class MantenimientoResultadosEvento : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {                
                Evento evento = (Evento)Session["eventoSeleccionado"];
                if (evento.Participantes.Count > 2)
                {
                    PanelParticipantes1.Visible = true;
                    RepeaterPosiciones.DataSource = evento.Participantes;
                    RepeaterPosiciones.DataBind();
                }
                else
                {
                    PanelParticipantes2.Visible = true;
                    bool modificacion = (evento.Resultados.Count > 0);
                    bool empate = true;
                    ListItem item = null;
                    Resultado resultado = null;
                    foreach (Participante participante in evento.Participantes)
                    {
                        item = new ListItem();
                        item.Text = "Ganó " + participante.Nombre;
                        item.Value = participante.Id + "";
                        if (modificacion)
                        {
                            resultado = EventoManager.GetManager().GetResultado(participante.Id, evento.Resultados);
                            if (resultado.Posicion.Equals(3))
                            {
                                item.Selected = true;
                                empate = false;
                            }
                        }                        
                        RadioButtonPosicion.Items.Add(item);
                    }

                    item = new ListItem();
                    item.Text = "Empate";
                    item.Value = "-1";
                    if (modificacion && empate)
                    {
                        item.Selected = true;
                    }
                    RadioButtonPosicion.Items.Add(item);
                }
            }
        }

        public void RepeaterPosiciones_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
        {
            Evento evento = (Evento)Session["eventoSeleccionado"];
            bool modificacion = (evento.Resultados.Count > 0);
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                ListItem itemDefault = new ListItem();
                itemDefault.Text = "Seleccionar Posición";
                itemDefault .Value = 0 + "";
                if (!modificacion)
                {
                    itemDefault.Selected = true;
                }
                ((DropDownList)e.Item.FindControl("ddlPosicion")).Items.Add(itemDefault);
                Resultado resultado = null;
                if (modificacion)
                {
                    int participanteId = int.Parse(((HiddenField)e.Item.FindControl("hiddenId")).Value);
                    resultado = EventoManager.GetManager().GetResultado(participanteId, evento.Resultados);
                }

                for (int i = 1; i <= evento.Participantes.Count; i++)
                {
                    ListItem item = new ListItem();
                    item.Text = i + "°";
                    item.Value = i +"";

                    if (resultado != null && resultado.Posicion == i)
                    {
                        item.Selected = true;
                    }

                    ((DropDownList)e.Item.FindControl("ddlPosicion")).Items.Add(item);                    
                }
            }
        }

        protected void lnkAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Evento evento = (Evento)Session["eventoSeleccionado"];
                evento.Resultados.Clear();

                if (evento.Participantes.Count > 2)
                {
                    List<int> posicionesIngresadas = new List<int>();
                    foreach (RepeaterItem item in RepeaterPosiciones.Items)
                    {
                        int posicion = int.Parse(((DropDownList)item.FindControl("ddlPosicion")).SelectedValue);
                        if (posicion == 0)
                        {
                            throw new EventoException(EventoException.RESULTADO_PARTICIPANTE_NO_INGRESADO);
                        }
                        else
                        {
                            if (posicionesIngresadas.Contains(posicion))
                            {
                                throw new EventoException(EventoException.RESULTADO_PARTICIPANTE_REPETIDO);
                            }
                            else
                            {
                                posicionesIngresadas.Add(posicion);
                                Resultado resultado = new Resultado();
                                resultado.Participante = new Participante();
                                resultado.Participante.Id = int.Parse(((HiddenField)item.FindControl("hiddenId")).Value);
                                resultado.Posicion = posicion;
                                evento.Resultados.Add(resultado);
                            }
                        }
                    }
                }
                else
                {
                    if (RadioButtonPosicion.SelectedValue == "")
                    {
                        throw new EventoException(EventoException.RESULTADO_PARTICIPANTE_NO_INGRESADO);
                    }
                    else
                    {
                        int selectedValue = int.Parse(RadioButtonPosicion.SelectedValue);
                        if (selectedValue == -1)
                        {
                            foreach (Participante participante in evento.Participantes)
                            {
                                Resultado resultado = new Resultado();
                                resultado.Participante = participante;
                                resultado.Posicion = 1;
                                evento.Resultados.Add(resultado);
                            }
                        }
                        else
                        {
                            foreach (Participante participante in evento.Participantes)
                            {
                                Resultado resultado = new Resultado();
                                resultado.Participante = participante;
                                if (participante.Id == selectedValue)
                                {
                                    resultado.Posicion = 3;
                                }
                                else
                                {
                                    resultado.Posicion = 0;
                                }

                                evento.Resultados.Add(resultado);
                            }
                        }
                    }
                }

                EventoManager.GetManager().ModificarEventoResultados(evento);
                Response.Redirect("MantenimientoEvento.aspx");
            }
            catch (EventoException ex)
            {
                lblError.Text = ex.Message;
            }
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            Session["eventoSeleccionado"] = null;
            Response.Redirect("MantenimientoEvento.aspx");
        }
    }
}